<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        /* 1.利用定位 + margin：auto */
        /* .father{
            width: 500px;
            height: 500px;
            background-color: red;
            position: relative;
        }
        .son{
            width: 200px;
            height: 200px;
            background-color: pink;
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            margin: auto;
        } */
        /* 父级设置为相对定位，子级绝对定位 ，并且四个定位属性的值都设置了0，那么这时候如果子级没有设置宽高，则会被拉开到和父级一样宽高 */
        /* 这里子元素设置了宽高，所以宽高会按照我们的设置来显示，但是实际上子级的虚拟占位已经撑满了整个父级，这时候再给它一个margin：auto它就可以上下左右都居中了 */


        /* 2.利用定位+margin:负值 */

        /* .father{
            width: 500px;
            height: 500px;
            background-color: red;
            position: relative;
        }
        .son{
            width: 200px;
            height: 200px;
            background-color: pink;
            position: absolute;
            left: 50%;
            top: 50%;
            margin-left: -100px;
            margin-top: -100px;
        } */


        /* 3.利用定位+transform */
        /* .father{
            width: 500px;
            height: 500px;
            background-color: red;
            position: relative;
        }
        .son{
            width: 200px;
            height: 200px;
            background-color: pink;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
        } */
        /* translate(-50%, -50%)将会将元素位移自己宽度和高度的-50%
        这种方法其实和最上面被否定掉的margin负值用法一样，可以说是margin负值的替代方案，并不需要知道自身元素的宽高 */

        /* 4.table布局 */
        /* 设置父元素为display:table-cell，子元素设置 display: inline-block。利用vertical和text-align可以让所有的行内块级元素水平垂直居中 */
        /* .father{
            width: 500px;
            height: 500px;
            background-color: red;
            display: table-cell;
            text-align: center;
            vertical-align: middle;
        }
        .son{
            width: 200px;
            height: 200px;
            background-color: pink;
            display: inline-block;
        } */

        /* 5.flex弹性布局 */

        .father{
            width: 500px;
            height: 500px;
            background-color: red;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .son{
            width: 200px;
            height: 200px;
            background-color: pink;
        }
        /* display: flex时，表示该容器内部的元素将按照flex进行布局

            align-items: center表示这些元素将相对于本容器水平居中

            justify-content: center也是同样的道理垂直居中 */
    </style>
</head>
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>
</html>